Kubernetes Object
とは
Kubernetes 上にあるものは、全て RESTful リソース として表現できる。こういったリソースを Kubernetes Object と呼ぶ。公式では、これを 永続的な Entity と表現している。Kubernetes はこれら Entity をクラスタの状態を表現するために利用する。
https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/
Label
概要
Label とは、Kubernetes Object に付与できる、キーと値のペア。1つないし複数の Kubernetes Object に対する抽象化レイヤー として働く。
巨大で複雑なアプリケーションを動かしてきた Google の経験から生まれている。以下の教訓がある。
1つしか作らないものを嫌う 初回デプロイ時は 1 台のインスタンスでも、アプリケーションが成熟するにつれてこのように 1 つしかないものは複数に増えていく。1 つ 1 つを管理するのではなく、オブジェクト単位で管理する必要がある
強制された階層構造には不満が多い 階層構造でサービス間の関係を表すことは難しい
ルール
キー [prefix/]<name>
prefix は任意であり、指定する場合、DNS サブドメインでなくてはならない。253 文字以下
name は必須であり、64 文字以下
値 63文字以下の文字列
操作
Label セレクタ
Annotation
Kubernetes Object に付与できる、ツールやライブラリを手助けするためのメタデータ。
例えば、以下のような情報を付与できる。
どこからきたのか?
どのように使うのか?
どのようなポリシーなのか?
Label との使い分けは好みの問題であり、オブジェクトの情報を付与したいなら Annotation にしておいて、Label セレクタが使いたくなったら Label に昇格させるのもあり。
ルール
Label と同様。値はフリーフォーマットとなっている。バリデーションがされないので、エラーを追うのが難しくなる場合もある。
操作
code:bash
# 現在の Namespace 内のリソースの全てを一覧表示する
$ kubectl get <リソース名>
# 特定のリソースの情報を取得する
$ kubectl get <リソース名> <オブジェクト名>
# 特定のオブジェクトについて詳しい情報を取得する
$ kubectl describe <リソース名> <オブジェクト名>
# オブジェクトを Kubernetes 上に作成する
$ kubectl apply -f <オブジェクト定義ファイル(YAML,JSONファイル)>
# オブジェクトを編集する
# 最新の状態を Kubernetes からダウンロードし、エディタで開く。保存すると自動的に Kubernetes 側も更新される
$ kubectl edit <リソース名> <オブジェクト名>
# オブジェクトを削除する
$ kubectl delete -f <オブジェクト定義ファイル(YAML,JSONファイル)>
$ kubectl delete <リソース名> <オブジェクト名>